CONFIG_FILE="./application.yml"  # 指定同级目录下的application.yml文
#!/bin/bash

# 配置部分
APP_NAME="jd-product-sync-0.0.1-SNAPSHOT.jar"
LOG_FILE="app.log"
PID_FILE="app.pid"

# 检查Java是否安装
check_java() {
    if ! command -v java &> /dev/null; then
        echo "Java未安装，请先安装Java。"
        exit 1
    fi
}

# 启动应用
start() {
    if [ -f "$PID_FILE" ]; then
        PID=$(cat "$PID_FILE")
        if ps -p $PID > /dev/null; then
            echo "$APP_NAME 正在运行，PID: $PID"
            exit 1
        else
            echo "发现旧的PID文件，已清理。"
            rm -f "$PID_FILE"
        fi
    fi

    echo "正在启动 $APP_NAME ..."
    # JVM参数优化配置
    JVM_OPTS="-XX:+UseG1GC \
              -Xms512m \
              -Xmx2048m \
              -XX:MaxRAMPercentage=75.0 \
              -XX:InitialRAMPercentage=25.0 \
              -XX:+AlwaysPreTouch \
              -XX:+UseStringDeduplication \
              -XX:MaxGCPauseMillis=200 \
              -XX:InitiatingHeapOccupancyPercent=45 \
              -XX:+HeapDumpOnOutOfMemoryError \
              -XX:HeapDumpPath=/opt/server/logs \
              -Xlog:gc*:file=./logs/gc.log:time,uptime,level,tags"
    nohup java $JVM_OPTS -jar "$APP_NAME" > "$LOG_FILE" 2>&1 &
    PID=$!
    echo $PID > "$PID_FILE"
    echo "$APP_NAME 已启动，PID: $PID"
}

# 停止应用
stop() {
    if [ ! -f "$PID_FILE" ]; then
        echo "PID文件不存在，可能服务未运行。"
        exit 1
    fi

    PID=$(cat "$PID_FILE")
    if ps -p $PID > /dev/null; then
        echo "正在停止 $APP_NAME (PID: $PID) ..."
        kill $PID
        rm -f "$PID_FILE"
        echo "$APP_NAME 已停止。"
    else
        echo "进程不存在，可能是已经停止。"
        rm -f "$PID_FILE"
    fi
}

# 主逻辑
case "$1" in
    start)
        check_java
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 1
        start
        ;;
    *)
        echo "用法: $0 {start|stop|restart}"
        exit 1
        ;;
esac
